#include <iostream>
#include <cuda_runtime.h>
#include "cublas_v2.h"
#include "../common/common.h"
#define DEVICENUM 0
#define M 5 // 5行
#define N 6 // 6列

int main(int argc, char **argv)
{
    cudaSetDevice(DEVICENUM);

    // 声明主机端矩阵A和矩阵hARes，并申请内存
    float *A = (float *)malloc(sizeof(float) * M * N);
    float *hARes = (float *)malloc(sizeof(float) * M * N);

    initialDataIncreasing(A, M * N);
    memset(hARes, 0, sizeof(float) * M * N);

    // printMatrix(A, M, N, "A");

    // 声明设备端矩阵dA,并出申请内存
    float *dA;
    CHECK(cudaMalloc((void **)&dA, sizeof(float) * M * N));

    // cpu->gpu,A-->dA,A行主序排列，dA列主序排列。
    // 注意，虽然A,dA排序方式不一样，但都是按照内存顺序依次保存数字的，所以打印的结果是相同的
    CHECK_CUBLAS(cublasSetMatrix(M, N, sizeof(float), A, M, dA, M));
    CHECK_CUBLAS(cublasGetMatrix(M, N, sizeof(float), dA, M, hARes, M));
    printMatrix(hARes, M, N, "hARes");

    free(A);
    free(hARes);
    cudaFree(dA);

    return 0;
}